#include "ContextoDeEjecucion.h"

using namespace modelo;

ContextoDeEjecucion::ContextoDeEjecucion(void)
{
};

CatedraMateria* ContextoDeEjecucion::BuscarCatedra(string codigoMateria, string codigoCatedra)
{
	list<InformacionMateria*>::iterator itInformacionMateria;
	for(itInformacionMateria = this->informacionMaterias.begin();
		itInformacionMateria != this->informacionMaterias.end(); itInformacionMateria++)
	{
		InformacionMateria* informacionMateria = *itInformacionMateria;
		if(informacionMateria->GetCodigo() == codigoMateria)
		{
			list<CatedraMateria*>::iterator itCatedras;
			list<CatedraMateria*> catedras = informacionMateria->GetCatedras(); 
			for(itCatedras = catedras.begin(); itCatedras != catedras.end(); itCatedras++)
			{
				CatedraMateria* catedra = *itCatedras;
				if(catedra->GetDescripcion() == codigoCatedra){
					return catedra;
				}
			}
		}
	}
	return NULL;
};

InformacionMateria* ContextoDeEjecucion::BuscarInformacionMateria(string codigo)
{
	list<InformacionMateria*>::iterator itInformacionMateria;
	for(itInformacionMateria = this->informacionMaterias.begin();
		itInformacionMateria != this->informacionMaterias.end(); itInformacionMateria++)
	{
		InformacionMateria* informacionMateria = *itInformacionMateria;
		if(informacionMateria->GetCodigo() == codigo)
		{
			return informacionMateria;
		}
	}
	return NULL;
};

InformacionMateriaSegunCarrera* ContextoDeEjecucion::BuscarInformacionMateriaSegunCarrera(string codigo)
{
	/** Buscamos entre las materias obligatorias */
	list<InformacionMateriaSegunCarrera*> informacionMateriasObligatorias = this->informacionCarrera->GetCondicionesMateriasObligatorias();
	list<InformacionMateriaSegunCarrera*>::iterator itInformacionMateriasObligatorias;
	for(itInformacionMateriasObligatorias = informacionMateriasObligatorias.begin();
		itInformacionMateriasObligatorias != informacionMateriasObligatorias.end(); itInformacionMateriasObligatorias++)
	{
		InformacionMateriaSegunCarrera* informacionMateria = *itInformacionMateriasObligatorias;
		if(informacionMateria->GetCodigo() == codigo)
		{
			return informacionMateria;
		}
	}

	/** Buscamos entre las materias optativas */
	list<InformacionMateriaSegunCarrera*> informacionMateriasOptativas = this->informacionCarrera->GetCondicionesMateriasOptativas();
	list<InformacionMateriaSegunCarrera*>::iterator itInformacionMateriasOptativas;
	for(itInformacionMateriasOptativas = informacionMateriasOptativas.begin();
		itInformacionMateriasOptativas != informacionMateriasOptativas.end(); itInformacionMateriasOptativas++)
	{
		InformacionMateriaSegunCarrera* informacionMateria = *itInformacionMateriasOptativas;
		if(informacionMateria->GetCodigo() == codigo)
		{
			return informacionMateria;
		}
	}
	return NULL;
};